from enum import IntEnum
from typing import overload, NewType, Optional, Tuple

from OCC.Core.Standard import *
from OCC.Core.NCollection import *
from OCC.Core.Expr import *
from OCC.Core.TCollection import *


class ExprIntrp_SequenceOfNamedExpression:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Length(self) -> int: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class ExprIntrp_SequenceOfNamedFunction:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Length(self) -> int: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class ExprIntrp_StackOfGeneralExpression:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class ExprIntrp_StackOfGeneralFunction:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class ExprIntrp_StackOfGeneralRelation:
    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def Size(self) -> int: ...
    def Clear(self) -> None: ...
    def First(self) -> False: ...
    def Last(self) -> False: ...
    def Append(self, theItem: False) -> False: ...
    def Prepend(self, theItem: False) -> False: ...
    def RemoveFirst(self) -> None: ...
    def Reverse(self) -> None: ...
    def Value(self, theIndex: int) -> False: ...
    def SetValue(self, theIndex: int, theValue: False) -> None: ...

class exprintrp:
    pass

class ExprIntrp_Analysis:
    def __init__(self) -> None: ...
    def GetFunction(self, name: str) -> Expr_NamedFunction: ...
    def GetNamed(self, name: str) -> Expr_NamedExpression: ...
    def IsExpStackEmpty(self) -> bool: ...
    def IsRelStackEmpty(self) -> bool: ...
    def Pop(self) -> Expr_GeneralExpression: ...
    def PopFunction(self) -> Expr_GeneralFunction: ...
    def PopName(self) -> str: ...
    def PopRelation(self) -> Expr_GeneralRelation: ...
    def PopValue(self) -> int: ...
    def Push(self, exp: Expr_GeneralExpression) -> None: ...
    def PushFunction(self, func: Expr_GeneralFunction) -> None: ...
    def PushName(self, name: str) -> None: ...
    def PushRelation(self, rel: Expr_GeneralRelation) -> None: ...
    def PushValue(self, degree: int) -> None: ...
    def ResetAll(self) -> None: ...
    def SetMaster(self, agen: ExprIntrp_Generator) -> None: ...
    @overload
    def Use(self, func: Expr_NamedFunction) -> None: ...
    @overload
    def Use(self, named: Expr_NamedExpression) -> None: ...

class ExprIntrp_Generator(Standard_Transient):
    def GetFunction(self, name: str) -> Expr_NamedFunction: ...
    def GetFunctions(self) -> ExprIntrp_SequenceOfNamedFunction: ...
    @overload
    def GetNamed(self) -> ExprIntrp_SequenceOfNamedExpression: ...
    @overload
    def GetNamed(self, name: str) -> Expr_NamedExpression: ...
    @overload
    def Use(self, func: Expr_NamedFunction) -> None: ...
    @overload
    def Use(self, named: Expr_NamedExpression) -> None: ...

class ExprIntrp_GenExp(ExprIntrp_Generator):
    @staticmethod
    def Create() -> ExprIntrp_GenExp: ...
    def Expression(self) -> Expr_GeneralExpression: ...
    def IsDone(self) -> bool: ...
    def Process(self, str: str) -> None: ...

class ExprIntrp_GenFct(ExprIntrp_Generator):
    @staticmethod
    def Create() -> ExprIntrp_GenFct: ...
    def IsDone(self) -> bool: ...
    def Process(self, str: str) -> None: ...

class ExprIntrp_GenRel(ExprIntrp_Generator):
    @staticmethod
    def Create() -> ExprIntrp_GenRel: ...
    def IsDone(self) -> bool: ...
    def Process(self, str: str) -> None: ...
    def Relation(self) -> Expr_GeneralRelation: ...

# harray1 classes
# harray2 classes
# hsequence classes

